# 在文件开头添加新的导入
from flask import Flask, render_template, request, jsonify, Response, stream_with_context
import os
import dotenv
from langchain_openai import ChatOpenAI
from flask_restx import Api, Namespace


# 加载环境变量
dotenv.load_dotenv()

app = Flask(__name__)

# 配置模型
os.environ["OPENAI_BASE_URL"] = os.getenv("OPENAI_BASE_URL")
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY")

# 初始化模型
chat_model = ChatOpenAI(
    model=os.getenv("OPENAI_MODEL", "gpt-3.5-turbo"),
    temperature=0.7
)

# 存储会话历史（在生产环境中应使用数据库）
session_histories = {}


@app.route('/')
def index():
    """返回主页面"""
    return render_template('index.html')


@app.route('/db')
def db_index():
    """返回数据库查询页面"""
    return render_template('index_db.html')


# 注册蓝图

from api.controllers.test import web_test_bp

app.register_blueprint(web_test_bp)

# 配置 Flask-RestX API
api = Api(
    app,
    version='1.0',
    title='Web Chat App API',
    description='一个基于 Flask 和 Langchain 的聊天应用 API',
    doc='/docs/'  # Swagger UI 的路径
)

# 创建命名空间
chat_ns = Namespace('chat', description='聊天相关操作')
api.add_namespace(chat_ns, path='/api/v1/chat')

# 创建数据库查询命名空间
db_ns = Namespace('database', description='数据库查询相关操作')
api.add_namespace(db_ns, path='/api/v1/database')

# 导入并初始化聊天 API 控制器
from api.controllers.web import chat_api
chat_api.init_chat_api(chat_ns, chat_model, session_histories)

# 导入并初始化数据库查询 API 控制器
from api.controllers.web import db_api
db_api.init_db_api(db_ns, chat_model)

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)